#include <bits/stdc++.h>

using namespace std;

// 插入、删除和获取随机元素O(1)时间的结构
// 测试链接 : https://leetcode.cn/problems/insert-delete-getrandom-o1/

class RandomizedSet
{
private:
    unordered_map<int, int> m;
    vector<int> arr;

public:
    RandomizedSet()
    {
        srand(time(nullptr));
    }

    bool insert(int val)
    {
        if(m.count(val)) return false;
        m[val] = arr.size();
        arr.emplace_back(val);
        return true;    
    }

    bool remove(int val)
    {
        if(!m.count(val)) return false;
        int valIndex = m[val];
        int endValue = arr.back();
        arr[valIndex] = endValue;
        arr.pop_back();
        m[endValue] = valIndex;
        m.erase(val);
        return true;
    }

    int getRandom()
    {
        return arr[rand() % arr.size()];
    }
};